package it.azienda.framework.view;

import it.azienda.framework.modello.BeanFind;
import it.azienda.framework.utilita.Utilita;
import it.azienda.managerworkstandard.modello.BeanLogin;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIViewRoot;
import javax.faces.component.html.HtmlForm;
import javax.faces.context.FacesContext;

public class Gestisci {
    
    public Gestisci() { }
    private ArrayList listaOggetti=new ArrayList();
    private ArrayList listaStorico=new ArrayList();
    private ArrayList listaStorico2=new ArrayList();
    
    public ArrayList getListaOggetti() {
        
        BeanFind find=(BeanFind)Utilita.getSession().getAttribute("findR");
        if(find!=null){
            ArrayList lista=find.ricercaOggetti(find,find.getTabellaR(),find.getProprietaR(),find.getBeanR());
            if(lista.size()!=0){
                BeanLogin login= (BeanLogin) Utilita.getSession().getAttribute("login");
                Utilita.getSession().removeAttribute("login");
                login.setListaOggetti(new HashMap());
                login.settaHashMapOggetti(lista);
                Utilita.getSession().setAttribute("login",login);
                Utilita.getSession().setAttribute("posizioneOggetto",new Integer(0));
                Object obj=lista.get(0);
                Dettaglio dettaglio = new Dettaglio();
                try{
                    dettaglio.controlloDopoSalvataggio(obj);
                }catch(Exception e){   }
                String nomeBean1 = find.getBeanR().substring(1, find.getBeanR().length());
                nomeBean1 = "b" + nomeBean1;
                Utilita.getRequest().setAttribute(nomeBean1,obj);
                Utilita.getRequest().removeAttribute("listaOggetti");
                Utilita.getRequest().setAttribute("listaOggetti",lista);
                Gestisci gestisci = new Gestisci();
                gestisci.setListaOggetti(lista);
                Utilita.getRequest().setAttribute("gestisci",gestisci);
            }else{
                FacesContext ctx = FacesContext.getCurrentInstance();
                HtmlForm form = (HtmlForm)ctx.getViewRoot().findComponent("erroriDataBase");
                form.setRendered(true);
                ctx.addMessage("erroriDataBase", new FacesMessage("Nessun Elemento Trovato!"));
                BeanLogin login= (BeanLogin) Utilita.getSession().getAttribute("login");
                Integer posi=(Integer)Utilita.getSession().getAttribute("posizioneOggetto");
                Object obj=(Object)login.getListaOggetti().get(posi);
                Dettaglio dettaglio = new Dettaglio();
                try{
                    dettaglio.controlloDopoSalvataggio(obj);
                }catch(Exception e){   }
                String nomeBean1 = find.getBeanR().substring(1, find.getBeanR().length());
                nomeBean1 = "b" + nomeBean1;
                Utilita.getRequest().setAttribute(nomeBean1,obj);
            }
            Utilita.getRequest().removeAttribute("beanFind");
            Utilita.getSession().removeAttribute("findR");
            return lista;
        }else{
            BeanLogin login= (BeanLogin) Utilita.getSession().getAttribute("login");
            HashMap map=login.getListaOggetti();
            for(int i =0; i<login.getListaOggetti().size();i++){
                Object obj=(Object)login.getListaOggetti().get(new Integer(i));
                listaOggetti.add(obj);
            }
            Utilita.getRequest().setAttribute("listaOggetti",listaOggetti);
        }
        return listaOggetti;
    }
    
    public ArrayList getListaStorico() {
        BeanLogin login= (BeanLogin) Utilita.getSession().getAttribute("login");
        HashMap map=login.getListaStorico();
        listaStorico = new ArrayList();
        if(login.getListaStorico()!=null){
            for(int i =0; i<login.getListaStorico().size();i++){
                Object obj=(Object)login.getListaStorico().get(new Integer(i));
                listaStorico.add(obj);
            }
        }
        Utilita.getRequest().setAttribute("listaStorico",listaStorico);
        return listaStorico;
    }
    
    public ArrayList getListaStorico2() {
        BeanLogin login= (BeanLogin) Utilita.getSession().getAttribute("login");
        HashMap map=login.getListaStorico2();
        listaStorico2 = new ArrayList();
        if(login.getListaStorico2()!=null){
            for(int i =0; i<login.getListaStorico2().size();i++){
                Object obj=(Object)login.getListaStorico2().get(new Integer(i));
                listaStorico2.add(obj);
            }
        }
        Utilita.getRequest().setAttribute("listaStorico2",listaStorico2);
        return listaStorico2;
    }
    
    public void setListaOggetti(ArrayList listaOggetti) {
        this.listaOggetti = listaOggetti;
    }
    
    public void setListaStorico(ArrayList listaStorico) {
        this.listaStorico = listaStorico;
    }
    
    public void setListaStorico2(ArrayList listaStorico2) {
        this.listaStorico2 = listaStorico2;
    }
    
    public void tornaDettaglio() {
        Dettaglio dettaglio=new Dettaglio();
        String nomeBean=Utilita.getRequest().getParameter("bean");
        BeanLogin login= (BeanLogin) Utilita.getSession().getAttribute("login");
        HashMap listaOggetti=login.getListaOggetti();
        Integer posizione=(Integer)Utilita.getSession().getAttribute("posizioneOggetto");
        Object obj=null;
        
        FacesContext ctx = FacesContext.getCurrentInstance();
        try{
            obj=(Object)listaOggetti.get(posizione);
            if(obj!=null){
                ctx.getExternalContext().getRequestMap().put(nomeBean,obj);
            }else{
                obj=(Object)listaOggetti.get(new Integer(0));
                ctx.getExternalContext().getRequestMap().put(nomeBean,obj);
                posizione=new Integer(0);
            }
            
            dettaglio.controlloDopoSalvataggio(obj);
        }catch(Exception ex){
            ctx.getExternalContext().getRequestMap().put(nomeBean,obj);
            try{
                dettaglio.controlloDopoSalvataggio(obj);
            }catch(Exception x){}
            return;
        }
        String url2 = "/dettaglio"+nomeBean.substring(4,nomeBean.length())+".jsf";
        UIViewRoot view = ctx.getApplication().getViewHandler().createView(ctx,url2);
        view.setViewId(url2);
        ctx.setViewRoot(view);
        ctx.renderResponse();
    }
    
    public void tornaDettaglioStorico() {
        Dettaglio dettaglio=new Dettaglio();
        String nomeBean=Utilita.getRequest().getParameter("bean");
        BeanLogin login= (BeanLogin) Utilita.getSession().getAttribute("login");
        HashMap listaOggetti=login.getListaStorico();
        Integer posizione=(Integer)Utilita.getSession().getAttribute("posizioneOggettoStorico");
        Object obj=null;
        
        FacesContext ctx = FacesContext.getCurrentInstance();
        try{
            obj=(Object)listaOggetti.get(posizione);
            if(obj!=null){
                ctx.getExternalContext().getRequestMap().put(nomeBean,obj);
            }else{
                obj=(Object)listaOggetti.get(new Integer(0));
                ctx.getExternalContext().getRequestMap().put(nomeBean,obj);
                posizione=new Integer(0);
            }
            
            dettaglio.controlloDopoSalvataggio(obj);
        }catch(Exception ex){
            ctx.getExternalContext().getRequestMap().put(nomeBean,obj);
            try{
                dettaglio.controlloDopoSalvataggio(obj);
            }catch(Exception x){}
            return;
        }
        String url2 = "/dettaglio"+nomeBean.substring(4,nomeBean.length())+".jsf";
        UIViewRoot view = ctx.getApplication().getViewHandler().createView(ctx,url2);
        view.setViewId(url2);
        ctx.setViewRoot(view);
        ctx.renderResponse();
    }
    
    public void caricaOggettoLista(){
        
        String nomeBean = Utilita.getRequest().getParameter("nomeBean");
        String idB = Utilita.getRequest().getParameter("idBean");
        
        BeanLogin login= (BeanLogin) Utilita.getSession().getAttribute("login");
        HashMap listaOggetti=login.getListaOggetti();
        
        Integer idBean=new Integer(idB);
        try {
            for(int y=0; y<listaOggetti.size();y++){
                Integer pos=new Integer(y);
                Method method=null;
                Object obj=(Object)listaOggetti.get(pos);
                Class classe = obj.getClass();
                classe.newInstance();
                
                Method[] metodi = classe.getMethods();
                for (int i=metodi.length; i>0; i--) {
                    Method metodo = metodi[i-1];
                    String nomeMetodo = metodo.getName();
                    if (nomeMetodo.startsWith("getId")) {
                        method = classe.getMethod(nomeMetodo, new Class[] {});
                        Integer id=(Integer)method.invoke(obj,new Object[] {});
                        if(id!=null){
                            if(id.intValue() == idBean.intValue()) {
                                Utilita.getSession().removeAttribute("posizioneOggetto");
                                Utilita.getSession().setAttribute("posizioneOggetto",pos);
                                Utilita.getRequest().setAttribute(nomeBean,obj);
                                y=listaOggetti.size();
                            }
                        }
                    }
                }
            }
        }catch(Exception ex){
            
        }
        FacesContext ctx = FacesContext.getCurrentInstance();
        String url2 = "/dettaglio"+nomeBean.substring(4,nomeBean.length())+".jsf";
        UIViewRoot view = ctx.getApplication().getViewHandler().createView(ctx,url2);
        view.setViewId(url2);
        ctx.setViewRoot(view);
        ctx.renderResponse();
    }
    
    public void caricaOggettoStorico(){
        
        String nomeBean = Utilita.getRequest().getParameter("nomeBean");
        String idB = Utilita.getRequest().getParameter("idBean");
        
        BeanLogin login= (BeanLogin) Utilita.getSession().getAttribute("login");
        HashMap listaOggetti=login.getListaStorico();
        
        Integer idBean=new Integer(idB);
        try {
            for(int y=0; y<listaOggetti.size();y++){
                Integer pos=new Integer(y);
                Method method=null;
                Object obj=(Object)listaOggetti.get(pos);
                Class classe = obj.getClass();
                classe.newInstance();
                
                Method[] metodi = classe.getMethods();
                for (int i=metodi.length; i>0; i--) {
                    Method metodo = metodi[i-1];
                    String nomeMetodo = metodo.getName();
                    if (nomeMetodo.startsWith("getId")) {
                        method = classe.getMethod(nomeMetodo, new Class[] {});
                        Integer id=(Integer)method.invoke(obj,new Object[] {});
                        if(id.intValue() == idBean.intValue()) {
                            Utilita.getSession().removeAttribute("posizioneOggettoStorico");
                            Utilita.getSession().setAttribute("posizioneOggettoStorico",pos);
                            Utilita.getRequest().setAttribute(nomeBean,obj);
                            y=listaOggetti.size();
                        }
                    }
                }
            }
        }catch(Exception ex){
            
        }
        FacesContext ctx = FacesContext.getCurrentInstance();
        String url2 = "/dettaglio"+nomeBean.substring(4,nomeBean.length())+".jsf";
        UIViewRoot view = ctx.getApplication().getViewHandler().createView(ctx,url2);
        view.setViewId(url2);
        ctx.setViewRoot(view);
        ctx.renderResponse();
    }
    
}
